package com.apes.framework.plugin.workflow;

import org.flowable.task.api.Task;

import java.util.List;
import java.util.Map;

public interface WorkflowEngine {


    /**
     * 功能：流程启动
     *
     * @param processDefinitionKey 工作流ID
     * @param variables            变量列表
     * @return 工作流实例编号
     */
    String startProcessInstanceById(String processDefinitionKey, Map variables);

    /**
     * 功能：任务执行
     *
     * @param taskId    任务ID
     * @param variables 输入参数
     */
    void executeTask(String taskId, Map variables);


    /**
     * 功能：查询待办
     *
     * @param userId
     * @return
     */
    List<Map> getTasks(String userId);

    /**
     * 功能：查询待办（分页）
     *
     * @param userId
     * @return
     */
    List<Map> getTasks(String userId, int page, int size);

    /**
     * 功能：通过任务编码查询待办
     *
     * @param taskId
     * @return
     */
    Map getTaskByTaskId(String taskId);


    /**
     * 功能：查询待办数量
     *
     * @param userId
     * @return
     */
    Long getTaskCount(String userId);


    /**
     * 功能：取下一步任务的排它网关信息
     *
     * @param processInstanceId
     * @return
     */
    List getExclusiveGateway(String processInstanceId);

    /**
     * 根据一个流程实例id挂起该流程实例
     *
     * @param processInstanceId
     */
    void suspendProcessInstanceById(String processInstanceId);

    /**
     * 根据一个流程实例id激活该流程实例
     *
     * @param processInstanceId
     */
    void activateProcessInstanceById(String processInstanceId);

}
